package org.example.com.atguigu.day05;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

import java.util.Properties;

public class ReaderFromMysql2 {
    public static void main(String[] args) {
        SparkSession spark = SparkSession.builder().master("local[4]").appName("test").getOrCreate();
        String url = "jdbc:mysql://hadoop102:3306/gmall?useUnicode=true&characterEncoding=UTF-8";
        String tableName = "user_info";
        Properties props = new Properties();
        props.setProperty("user", "root");
        props.setProperty("password", "000000");
        // todo 读取MySQL的第二种方式 (不常用)
        // TODO 这种方式的缺陷是,如果你的分区过多,那就要写非常多的conditions
        // TODO 此种方式创建的dataset的分区数 = conditions 中元素的个数
        // TODO conditions 中每个元素代表每个分区拉取数据的where条件
        String[] conditions = {"id<10", "id>=10 and id <40", "id >= 40 and id <80", "id >80"};
        Dataset<Row> ds = spark.read().jdbc(url, tableName, conditions, props);
        // 查看分区数
        System.out.println(ds.javaRDD().getNumPartitions());  // 4 个
        // 将数据保存,可以看到最终有四个文件
        ds.javaRDD().saveAsTextFile("output");
        // 展示所有数据
        ds.show();
    }
}
